package com.cn.wanxi.service.impl;

import com.cn.wanxi.dao.CompanyDao;
import com.cn.wanxi.model.CompanyModel;
import com.cn.wanxi.service.ICompanyService;
import com.cn.wanxi.util.IOTool;
import com.cn.wanxi.util.Path;
import com.cn.wanxi.util.PathEnum;

import java.io.*;
import java.security.spec.ECField;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;

/**
 * 第三阶段  接口实现类
 * 属于来源于文件
 * 1.创建文件---
 * 2.写入数据--将dao层的数据写入到记事本
 * 3.读取数据--将记事本的数据读取出来--读取出来的数据属于字符串
 * 4.封装数据：我们需要得到的是model --CompanyModel  将字符串解析成CompanyModel
 */
public class CompanyServiceImpl implements ICompanyService {
    private String split = "\n";

    /**
     * 方法的作用：执行
     * 方法里面的代码不能太多--不能太复杂
     * 建议：每个方法制作一件事情
     *
     * @return
     */
    @Override
    public CompanyModel getCompanyModel() {
//        如果全部把代码写在这里，会发现代码复杂度变强
//        所以，需要将代码进行精简---
//        本方法知识调用四个方法的作用

//        1.创建文件
        IOTool.createNote(PathEnum.PATH.getPath(), PathEnum.FILE_NAME_COMPANY.getPath());
//        2.写入数据
        List<String> data = setCompanyData();
        String result = IOTool.writeData(data);
//        if (result.equals("error")) {
//            return null;
//        }

//        3.读取数据
//        StringBuilder转换成string的方法？
//        int a = 111;
//        String bb = "";
//        String cc="";
//        String dd=bb+cc;
//        String ee="aa"+"aa";
//        dd 和ee 创建了几个对象？
//        bb = (String)a;
//        bb = a + "";
//        bb = String.valueOf(a);

        String string = IOTool.readData();
//        4.封装数据
        CompanyModel companyModel = setData(string);
        return companyModel;
    }

    private List<String> setCompanyData() {
        CompanyDao companyDao = new CompanyDao();
//        String[] data = {companyDao.logo, companyDao.phone, companyDao.net};
//        String[] data = new String[7];
//        data[0] = companyDao.logo;
//        data[1] = companyDao.logo;
//        data[2] = companyDao.logo;
//        集合,集合和数组的区别？
//        hashmap和list的区别？
//        HashMap<K,V>
        List<String> list = new ArrayList<>();
        list.add(companyDao.logo);
        list.add(companyDao.phone);
        list.add(companyDao.net);
        list.add(companyDao.email);
        list.add(companyDao.address);
        list.add(companyDao.linePhone);
        list.add(companyDao.version);
        return list;
    }

    /**
     * 根据读取的结果，封装成companyModel
     *
     * @param string
     * @return
     */
    private CompanyModel setData(String string) {
        String[] split = string.split(this.split);//里面的参数可以是正则表达式
        for (int i = 0; i < split.length; i++) {
            System.out.println(split[i] + "--------------");
        }
        CompanyModel companyModel = new CompanyModel();
        try {
            companyModel.setLogo(split[0]);
            companyModel.setPhone(split[1]);
            companyModel.setNet(split[2]);
            companyModel.setEmail(split[3]);
            companyModel.setAddress(split[4]);
            companyModel.setLinePhone(split[5]);
            companyModel.setVersion(split[6]);
        } catch (Exception e) {
//            return null;
        }

        return companyModel;
    }


    /**
     * 写入数据
     * 写在哪里？需要拿到刚刚创建的文件
     * 怎么写？
     */
//    private String writeData(File note) {
////        Java  逻辑运算符 && ||
////        Java  位运算符 & | ^
////        赋值运算符  = += -+ *= ?= /=
////        比较运算符 == > < >= <= !=
////        三元运算符 ?:
////        int a = 1;
////        int b = 0;
////        boolean boo = a > b;
////        int c = boo ? 1 : 4;
////        if (boo) {
////            c = 1;
////        } else
////            c = 4;
//
////        算术运算符  + - * / %
////        Java运算符优先级
////        int d=a++ + ++b;
////        for (int i = 0; i < 2; i++) {
////            a++;
////            ++a;
////            a=a++;
////            a=++a;
////            a+=a;
////        }
////        System.out.println(a);
////        System.out.println(d);
//        if (note == null || !note.exists()) {
//            return "error";
//        }
////        if (!note.exists()) {
////            return "error";
////        }
////        InputStream
////        写入数据--从内存到硬盘 ---输出流
//        try {
//            OutputStream outputStream = new FileOutputStream(note);
////            String c = "粟鹏";
//            char c = '粟';
//            Character cc = c;
//            CompanyDao companyDao = new CompanyDao();
//
////            Character cc=c;
////            outputStream.write(cc.toString().getBytes());
//            byte[] bytes = companyDao.logo.getBytes();
//            outputStream.write(bytes);
//            outputStream.write(split.getBytes());
//            outputStream.write(companyDao.phone.getBytes());
//            outputStream.write(split.getBytes());
//            outputStream.write(companyDao.net.getBytes());
//            outputStream.write(split.getBytes());
//            outputStream.write(companyDao.email.getBytes());
//            outputStream.write(split.getBytes());
//            outputStream.write(companyDao.address.getBytes());
//            outputStream.write(split.getBytes());
//            outputStream.write(companyDao.linePhone.getBytes());
//            outputStream.write(split.getBytes());
//            outputStream.write(companyDao.version.getBytes());
//            outputStream.write(split.getBytes());
////            向上转型和向下转型
////            强制转换和自动转换
//        } catch (IOException e) {
//            e.printStackTrace();
//        }
//        return "success";
//    }

    /**
     * 创建记事本
     * 1.创建文件夹
     * 2.创建文件
     */
//    private File createNote() {
////        有import  表示当前jdk里面一件封装好对象了
////        既然需要创建文件和文件夹，所以一般情况下我们会将路径和文件名分开
//        String path = "E:\\wanxi\\step-3\\canyin03-0615\\web\\note";
////        异常 ：在那个地方出现异常就在那个地方进行捕获
//        String fileName = "company.txt";
//        File directory = new File(path);
////        1.首先判断文件夹路径是否存在
////        2.如果不存在，则创建文件夹
////        3.如果存在，则直接创建文件
//        if (!directory.exists()) {
//            directory.mkdirs();
////            File file = new File(path, fileName);
////            try {
////                file.createNewFile();
////            } catch (IOException e) {
////                e.printStackTrace();
////            }
//        }
//        File file = new File(path, fileName);
//        try {
//            file.createNewFile();
//        } catch (IOException e) {
//            e.printStackTrace();
//        }
//        return file;
////        if (!testFile.exists()) {
////            System.out.println(testFile.mkdirs());// 能创建多级目录
////            testFile.mkdirs();
////        try {
//////                文件名和文件夹名不能重复
////            boolean aa = testFile.createNewFile();
////            System.out.println(aa);
////        } catch (IOException e) {
////            e.printStackTrace();
////        }
////        }
//    }

//    private void temp(String path, String fileName) {
//        File file = new File(path, fileName);
//        try {
//            file.createNewFile();
//        } catch (IOException e) {
//            e.printStackTrace();
//        }
//    }
    public static void main(String[] args) {
        System.out.println(PathEnum.PATH.getPath());
//        new CompanyServiceImpl().getCompanyModel();
    }
}
